package com.cskaoyan.javase.method._2exercise;

import javax.xml.transform.sax.SAXTransformerFactory;

/**
 * 计算器类
 * 该类下可以进行:
 * 加，减，乘，除
 * 求平方
 * 求a的n次方
 * ...
 * 运算
 *
 *
 * @since 15:10
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Calculator {
    public static void main(String[] args) {
        System.out.println(divide(10, 3));
        System.out.println(power(2, 10));
    }

    // 加
    public static int add(int num1, int num2) {
        return num1 + num2;
    }

    // 减
    public static int subtract(int num1, int num2) {
        return num1 - num2;
    }

    // 乘
    public static int multiply(int num1, int num2) {
        return num1 * num2;
    }

    // 除
    public static double divide(int num1, int num2) {
        // return num1 / (num2 * 1.0);
        return ((num1 / (double) num2));
    }

    public static int square(int num) {
        return num * num;
    }

    // 求a的n次方,幂运算 a和n都是整数
    public static int power(int a, int n) {
        /*
            这里实现幂运算有两种方式:
                1.循环
                2.使用Math数学工具类中的方法Math.pow(double,double)
         */
        // Math.pow(double,double)方法的返回值类型是double类型,而本方法的返回值类型是int类型
        // double --> int是强制类型转换,所以不能直接return,而是需要强转后再return
        // return Math.pow(a, n);
        // 由于a,n都是整数,幂运算不会出现小数,所以这里强转没有任何精度丢失的问题
        // return (int) Math.pow(a, n);

        // 手动实现,使用循环,a的n次方,相当于n个a相乘
        // 初始值设置为1
        int result = 1;
        for (int i = 0; i < n; i++) {
            result *= a;
        }
        return result;
    }

}
